﻿import type { RequestOptions } from '@@/plugin-request/request';
import { history, type RequestConfig } from '@umijs/max';
import { message } from 'antd';


// 与后端约定的响应数据格式
interface ResponseStructure {
  success: boolean;
  data: any;
  errorCode?: number;
  errorMessage?: string;
}

const isDev = process.env.NODE_ENV === 'development';

/**
 * @name 错误处理
 * pro 自带的错误处理， 可以在这里做自己的改动
 * @doc https://umijs.org/docs/max/request#配置
 */
export const requestConfig: RequestConfig = {
  baseURL: isDev ? '/api' : 'http://127.0.0.1:7777',
  withCredentials: true,

  // 请求拦截器
  requestInterceptors: [
    (config: RequestOptions) => {
      // 拦截请求配置，进行个性化处理。
      // 获取 token
      const token = localStorage.getItem('token'); // 假设 token 存储在 localStorage 中
      // 如果 token 存在，则将其添加到请求头中
      if (token) {
        config.headers = {
          ...config.headers,
          Authorization: `Bearer ${token}`, // 使用 Bearer 认证方式
        };
      }
      return config
    },
  ],

  // 响应拦截器
  responseInterceptors: [
    (response) => {
      // 访问路径
      const path: string = response.config.url ?? '';      
      // 响应
      const { data } = response as unknown as ResponseStructure;
      if (!data) {
        throw new Error('服务异常');
      }
      // token 失效，重定向到登录页
      if(data.code === -1005 && path !== '/user/login') {
        // 清除无效的 token
        localStorage.removeItem('token');
        // 跳转到登录页面
        history.push('/user/login');
        message.error('Token 失效，已重定向到登录页');
        // return Promise.reject(new Error('Token 失效，已重定向到登录页'));
        
      }
      if (data.code !== 0) {
        throw new Error(data.message ?? '服务器错误');
      }
      return response;
    },
  ]


};
